package com.itheima.service;

import com.alibaba.dubbo.config.annotation.Service;
import com.itheima.dao.MemberDao;
import com.itheima.dao.OrderDao;
import com.itheima.dao.SetmealDao;
import com.itheima.utils.DateUtils;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author 黑马程序员
 * @Company http://www.ithiema.com
 * @Version 1.0
 */
@Service
public class ReportServiceImpl implements ReportService {

    @Autowired
    MemberDao memberDao;

    @Autowired
    OrderDao orderDao;

    @Autowired
    SetmealDao setmealDao;

    /**
     *
     *
         reportDate:null,   统计时间， 当前时间
         todayNewMember :0,  今日新增会员数
         totalMember :0,      总会员数
         thisWeekNewMember :0,  本周新增会员数：本周一到今天，总共新增了多少会员
         thisMonthNewMember :0,  本月新增会员数：本月1号到今天，新增了多少会员
         todayOrderNumber :0,   今日预约数： 预约今天要来体检的人数
         todayVisitsNumber :0,  今日到访数： 今天实际来体检的有多少人
         thisWeekOrderNumber :0,  本周预约数：预约本周要来体检的人数， 本周一到本周日预约要来体检的人数
         thisWeekVisitsNumber :0,  本周的到访数：本周实际来了多少人： 本周一到今天实际来了多少人
         thisMonthOrderNumber :0, 本月的预约数： 预约本周要来体检的人数，本月1号到本月最后一天预约要来体检的人数
         thisMonthVisitsNumber :0,本月的到访数：本月实际来了多少人： 本月1号到今天实际来了多少人
         hotSetmeal :[ （预约人数最多的套餐：要前两名）
             {name:'阳光爸妈升级肿瘤12项筛查（男女单人）体检套餐',setmeal_count:200,proportion:0.222},
             {name:'阳光爸妈升级肿瘤12项筛查体检套餐',setmeal_count:200,proportion:0.222}
         ]
     * @return
     */
    @Override
    public Map<String, Object> getBusinessReportData() throws Exception {
        //获取今天的日期
        String todayDate = DateUtils.parseDate2String(new Date());
        //获取本周一日期
        String thisWeekMonday = DateUtils.parseDate2String(DateUtils.getThisWeekMonday());
        //获取本周日日期
        String thisWeekSunDay = DateUtils.parseDate2String(DateUtils.getSundayOfThisWeek());
        //获取本月1号日期
        String thisMonthFirstDay = DateUtils.parseDate2String(DateUtils.getFirstDay4ThisMonth());
        //获取本月最后一天日期
        String thisMonthLastDay = DateUtils.parseDate2String(DateUtils.getLastDay4ThisMonth());
        //reportDate:null,   统计时间， 当前时间
        String reportDate = todayDate;
        //todayNewMember :0,  今日新增会员数
        long todayNewMember = memberDao.findTodayNewMember(todayDate);
        //totalMember :0,      总会员数
        long totalMember = memberDao.findTotalMember();
        //thisWeekNewMember :0,  本周新增会员数：本周一到今天，总共新增了多少会员
        long thisWeekNewMember = memberDao.findCountByAfterDate(thisWeekMonday);
        //thisMonthNewMember :0,  本月新增会员数：本月1号到今天，新增了多少会员
        long thisMonthNewMember = memberDao.findCountByAfterDate(thisMonthFirstDay);
        //todayOrderNumber :0,   今日预约数： 预约今天要来体检的人数
        long  todayOrderNumber = orderDao.findTodayOrderNumber(todayDate);
        //todayVisitsNumber :0,  今日到访数： 今天实际来体检的有多少人
        long todayVisitsNumber =  orderDao.findTodayVisitsNumber(todayDate);
        //thisWeekOrderNumber :0,  本周预约数：预约本周要来体检的人数， 本周一到本周日预约要来体检的人数
        long thisWeekOrderNumber = orderDao.findCountByBetweenDate(thisWeekMonday, thisWeekSunDay);
        //thisWeekVisitsNumber :0,  本周的到访数：本周实际来了多少人： 本周一到今天实际来了多少人
        long thisWeekVisitsNumber = orderDao.findVisitsCountByAfterDate(thisWeekMonday);
        //thisMonthOrderNumber :0, 本月的预约数： 预约本周要来体检的人数，本月1号到本月最后一天预约要来体检的人数
        long thisMonthOrderNumber = orderDao.findCountByBetweenDate(thisMonthFirstDay, thisMonthLastDay);
        //thisMonthVisitsNumber :0,本月的到访数：本月实际来了多少人： 本月1号到今天实际来了多少人
        long thisMonthVisitsNumber = orderDao.findVisitsCountByAfterDate(thisMonthFirstDay);
        // hotSetmeal :[ （预约人数最多的套餐：要前两名）
        // [ （预约人数最多的套餐：要前两名）
            // {name:'阳光爸妈升级肿瘤12项筛查（男女单人）体检套餐',setmeal_count:200,proportion:0.222},
            // {name:'阳光爸妈升级肿瘤12项筛查体检套餐',setmeal_count:200,proportion:0.222}
        //  ]
        List<Map<String,Object>> hotSetmeal = setmealDao.findHotSetmeal();

        //创建返回值Map集合
        Map<String,Object> map = new HashMap<>();

        map.put("reportDate", reportDate);
        map.put("todayNewMember", todayNewMember);
        map.put("totalMember", totalMember);
        map.put("thisWeekNewMember", thisWeekNewMember);
        map.put("thisMonthNewMember", thisMonthNewMember);
        map.put("todayOrderNumber", todayOrderNumber);
        map.put("todayVisitsNumber", todayVisitsNumber);
        map.put("thisWeekOrderNumber", thisWeekOrderNumber);
        map.put("thisWeekVisitsNumber", thisWeekVisitsNumber);
        map.put("thisMonthOrderNumber", thisMonthOrderNumber);
        map.put("thisMonthVisitsNumber", thisMonthVisitsNumber);
        map.put("hotSetmeal", hotSetmeal);
        return map;
    }
}
